//package com.mt.vsphere.business.vshpereApi;
//
//import com.vmware.vim25.*;
//
//import javax.xml.ws.soap.SOAPFaultException;
//import java.util.ArrayList;
//import java.util.List;
//
//public class Main2 {
//    private static TraversalSpec getVmTraversalSpec()
//    {
//        SelectionSpec sSpec = new SelectionSpec();
//        sSpec.setName("VisitFolders");
//
//        TraversalSpec dataCenterToVMFolder = new TraversalSpec();
//        dataCenterToVMFolder.setName("DataCenterToVMFolder");
//        dataCenterToVMFolder.setType("Datacenter");
//        dataCenterToVMFolder.setPath("hostFolder");
//        dataCenterToVMFolder.setSkip(false);
//        dataCenterToVMFolder.getSelectSet().add(sSpec);
//
//        TraversalSpec traversalSpec = new TraversalSpec();
//        traversalSpec.setName("VisitFolders");
//        traversalSpec.setType("Folder");
//        traversalSpec.setPath("childEntity");
//        traversalSpec.setSkip(false);
//
//
//        TraversalSpec computeResourceSpec = new TraversalSpec();
//        computeResourceSpec.setName("VisitCompute");
//        computeResourceSpec.setType("ComputeResource");
//        computeResourceSpec.setPath("host");
//        computeResourceSpec.setSkip(false);
//
//
//        List<SelectionSpec> sSpecArr = new ArrayList<SelectionSpec>();
//        sSpecArr.add(sSpec);
//        sSpecArr.add(dataCenterToVMFolder);
//        sSpecArr.add(computeResourceSpec);
////        sSpecArr.add(hostSpec);
//
//        traversalSpec.getSelectSet().addAll(sSpecArr);
//
//        return traversalSpec;
//    }
//
//    private static ManagedObjectReference getAllVm() {
//        ManagedObjectReference retVal = null;
//        ManagedObjectReference rootFolder = MoniterWsInterface.serviceContent.getRootFolder();
//        try {
//            TraversalSpec tSpec = getVmTraversalSpec();
//
//            PropertySpec propertySpec = new PropertySpec();
//            propertySpec.setAll(Boolean.FALSE);
//            propertySpec.getPathSet().add("name");
//            propertySpec.getPathSet().add("summary");
//            propertySpec.getPathSet().add("runtime");
//            propertySpec.getPathSet().add("vm");
//            propertySpec.setType("HostSystem");
//
////            PropertySpec pSpecNs = new PropertySpec();
////            pSpecNs.setType("Network");
////            pSpecNs.getPathSet().add("summary.accessible");
//
//            ObjectSpec objectSpec = new ObjectSpec();
//            objectSpec.setObj(rootFolder);
//            objectSpec.setSkip(Boolean.TRUE);
//            objectSpec.getSelectSet().add(tSpec);
//
//            PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
//            propertyFilterSpec.getPropSet().add(propertySpec);
////            propertyFilterSpec.getPropSet().add(propertySpec1);
//            propertyFilterSpec.getObjectSet().add(objectSpec);
//
//            List<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>(1);
//            listpfs.add(propertyFilterSpec);
//            List<ObjectContent> listobjcont = MoniterWsInterface.retrievePropertiesAllObjects(listpfs);
//
////            if (listobjcont != null) {
////                for (ObjectContent oc : listobjcont) {
////                    ManagedObjectReference mr = oc.getObj();
////                    String vmnm = null;
////                    List<DynamicProperty> dps = oc.getPropSet();
////                    if (dps != null) {
////                        for (DynamicProperty dp : dps) {
////                            vmnm = (String) dp.getVal();
////                        }
////                    }
////                    System.out.println(vmnm);
////                }
////            }
//        } catch (SOAPFaultException sfe) {
//            MoniterWsInterface.printSoapFaultException(sfe);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return retVal;
//    }
//
//    private static void getAllComputeResource(ManagedObjectReference datecenterRefer) throws Exception {
//
//        TraversalSpec dataCenterToHostFolder = new TraversalSpec();
//        dataCenterToHostFolder.setName("DataCenterToVMFolder");
//        dataCenterToHostFolder.setType("Datacenter");
//        dataCenterToHostFolder.setPath("hostFolder");
//        dataCenterToHostFolder.setSkip(false);
//
//        TraversalSpec traversalSpec = new TraversalSpec();
//        traversalSpec.setName("VisitFolders");
//        traversalSpec.setType("Folder");
//        traversalSpec.setPath("childEntity");
//
//        dataCenterToHostFolder.getSelectSet().add(traversalSpec);
//
//
//        ObjectSpec objectSpec = new ObjectSpec();
//        objectSpec.setObj(datecenterRefer);
//        objectSpec.setSkip(Boolean.TRUE);
//        objectSpec.getSelectSet().add(dataCenterToHostFolder);
//
//        PropertySpec propertySpec = new PropertySpec();
//        propertySpec.setAll(Boolean.FALSE);
//        propertySpec.getPathSet().add("name");
//        propertySpec.setType("ComputeResource");
//
//
//        List<ObjectContent> listobjcont = getResult(objectSpec,propertySpec);
//
//        for (ObjectContent objectContent:listobjcont){
//            ManagedObjectReference managedObjectReference = objectContent.getObj();
//
//            objectContent.getPropSet().forEach(item->{
//                objectContent.getPropSet().forEach(item1->{
//                    System.out.println(item1.getVal());
//                });
//            });
//
//            if ("ClusterComputeResource".equals(managedObjectReference.getType())){
//                //如果是集群那么寻找他下面所有的主机
//                getAllHostInClusterComputeResource(managedObjectReference);
//            }else if ("HostSystem".equals(managedObjectReference.getType())){
//                getAllVmInHost(managedObjectReference);
//            }
//
//        }
//    }
//
//    //获取集群下面的所有主机
//    public static void getAllHostInClusterComputeResource(ManagedObjectReference clusterComputeResourceObj) throws Exception {
//        List<ObjectContent>  list = getAttrInObj(clusterComputeResourceObj,"host","HostSystem");
//        for (ObjectContent objectContent:list){
//            objectContent.getPropSet().forEach(item->{
//                objectContent.getPropSet().forEach(item1->{
//                    System.out.println(item1.getVal());
//                });
//            });
//            getAllVmInHost(objectContent.getObj());
//        }
//    }
//
//    //获取集群下面的所有主机
//    public static void getAllVmInHost(ManagedObjectReference hostObj) throws Exception {
//        List<ObjectContent>  list = getAttrInObj(hostObj,"vm","VirtualMachine");
//        for (ObjectContent objectContent:list){
//            objectContent.getPropSet().forEach(item->{
//                objectContent.getPropSet().forEach(item1->{
//                    System.out.println(item1.getVal());
//                });
//            });
//        }
//    }
//
//    //获取某个对象下的属性
//    public static List<ObjectContent> getAttrInObj(ManagedObjectReference obj,String path,String attrType) throws Exception {
//
//        TraversalSpec traversalSpec = new TraversalSpec();
//        traversalSpec.setName("VisitObj");
//        traversalSpec.setType(obj.getType());
//        traversalSpec.setPath(path);
//        traversalSpec.setSkip(false);
//
//        ObjectSpec objectSpec = new ObjectSpec();
//        objectSpec.setObj(obj);
//        objectSpec.setSkip(Boolean.TRUE);
//        objectSpec.getSelectSet().add(traversalSpec);
//
//        PropertySpec propertySpec = new PropertySpec();
//        propertySpec.setAll(Boolean.FALSE);
//        propertySpec.getPathSet().add("name");
//        propertySpec.setType(attrType);
//
//        return getResult(objectSpec,propertySpec);
//    }
//    //获取所有的数据
//    // 包括Vcenter的目录结构 数据中心->群集 主机->Vapp 虚拟机
//    // 获取每台主机的信息 获取每台是虚拟机的信息
//    //
//
//
//
//    public static List<ObjectContent> getResult(ObjectSpec objectSpec,PropertySpec propertySpec) throws Exception {
//        PropertyFilterSpec propertyFilterSpec = new PropertyFilterSpec();
//        propertyFilterSpec.getPropSet().add(propertySpec);
//        propertyFilterSpec.getObjectSet().add(objectSpec);
//
//        List<PropertyFilterSpec> listpfs = new ArrayList<PropertyFilterSpec>(1);
//        listpfs.add(propertyFilterSpec);
//        return MoniterWsInterface.retrievePropertiesAllObjects(listpfs);
//    }
//    public static void main(String[] args) throws Exception {
//        MoniterWsInterface.connect();
//        getAllDataCenters();
////        getfsf();
////        getAllVm();
////        RetrieveResult retrieveResult = getRetrieveResultObjectWithProperty("Folder", "childEntity");
//        //我要获取所有资源的路径 包括数据中心 虚拟机 资源池
//        MoniterWsInterface.disconnect();
//    }
//
//    public static void getAllDataCenters(){
//        ManagedObjectReference retVal = null;
//        ManagedObjectReference rootFolder = MoniterWsInterface.serviceContent.getRootFolder();
//        try {
//
//
//            TraversalSpec traversalSpec = new TraversalSpec();
//            traversalSpec.setName("VisitFolders");
//            traversalSpec.setType("Folder");
//            traversalSpec.setPath("childEntity");
//            traversalSpec.setSkip(false);
//
//
//            PropertySpec propertySpec = new PropertySpec();
//            propertySpec.setAll(Boolean.FALSE);
//            propertySpec.getPathSet().add("name");
//            propertySpec.setType("Datacenter");
//
////            PropertySpec pSpecNs = new PropertySpec();
////            pSpecNs.setType("Network");
////            pSpecNs.getPathSet().add("summary.accessible");
//
//            ObjectSpec objectSpec = new ObjectSpec();
//            objectSpec.setObj(rootFolder);
//            objectSpec.setSkip(Boolean.TRUE);
//            objectSpec.getSelectSet().add(traversalSpec);
//
//            List<ObjectContent> listobjcont = getResult(objectSpec,propertySpec);
//
//            for (ObjectContent objectContent:listobjcont){
//                ManagedObjectReference managedObjectReference = objectContent.getObj();
//                getAllComputeResource(managedObjectReference);
//                objectContent.getPropSet().forEach(item->{
//                    objectContent.getPropSet().forEach(item1->{
//                        System.out.println(item1.getVal());
//                    });
//                });
//            }
//
//        } catch (SOAPFaultException sfe) {
//            MoniterWsInterface.printSoapFaultException(sfe);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//
//
//
//    //收集某个ManagedEntity下的所有属性
//    private static RetrieveResult getRetrieveResultObjectWithProperty(String MorName, String...propertys) throws InvalidPropertyFaultMsg, RuntimeFaultFaultMsg
//    {
//        ManagedObjectReference viewMgrRef = MoniterWsInterface.serviceContent.getViewManager();
//        ManagedObjectReference propColl = MoniterWsInterface.serviceContent.getPropertyCollector();
//
//        List<String> vmList = new ArrayList<String>();
//        vmList.add(MorName);
//
//        ManagedObjectReference cViewRef = MoniterWsInterface.vimPort.createContainerView(viewMgrRef, MoniterWsInterface.serviceContent.getRootFolder(), vmList, true);
//
//        ObjectSpec oSpec = new ObjectSpec();
//        oSpec.setObj(cViewRef);
//        oSpec.setSkip(true);
//
//        TraversalSpec tSpec = new TraversalSpec();
//        tSpec.setName("traversalEntities");
//        tSpec.setPath("view");
//        tSpec.setSkip(false);
//        tSpec.setType("ContainerView");
//
//        oSpec.getSelectSet().add(tSpec);
//
//        PropertySpec pSpec = new PropertySpec();
//        pSpec.setType(MorName);
//        pSpec.getPathSet().add("name");
//
//        PropertySpec pSpecRPr = new PropertySpec();
//        pSpecRPr.setType(MorName);
//        for (String prp : propertys) {
//            pSpecRPr.getPathSet().add(prp);
//        }
//
//        PropertyFilterSpec fSpec = new PropertyFilterSpec();
//        fSpec.getObjectSet().add(oSpec);
//        fSpec.getPropSet().add(pSpec);
//        fSpec.getPropSet().add(pSpecRPr);
//
//        List<PropertyFilterSpec> fSpecList = new ArrayList<PropertyFilterSpec>();
//        fSpecList.add(fSpec);
//
//        RetrieveOptions ro = new RetrieveOptions();
//        RetrieveResult props = MoniterWsInterface.vimPort.retrievePropertiesEx(propColl, fSpecList, ro);
//
//        return props;
//    }
//}
